package com.qys.livesMall.app.user.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qys.livesMall.app.user.model.dto.sys.HandselQueryDTO;
import com.qys.livesMall.app.user.model.dto.sys.SysAppUserQueryDTO;
import com.qys.livesMall.app.user.model.dto.sys.SysHomeStatisticsDTO;
import com.qys.livesMall.app.user.model.entity.H2AppUser;
import com.qys.livesMall.app.user.model.vo.TelephoneAreaCodeVO;
import com.qys.livesMall.app.user.model.vo.app.AppUserInfoTeamDetailVo;
import com.qys.livesMall.app.user.model.vo.app.AppUserInviteVO;
import com.qys.livesMall.app.user.model.vo.sys.*;
import com.qys.livesMall.finance.model.entity.user.FinanceUserAccountDetail;
import com.qys.livesMall.framework.view.BaseQuery;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 用户 Mapper 接口
 * </p>
 *
 * @author dp
 * @since 2023-04-20
 */
public interface H2AppUserMapper extends BaseMapper<H2AppUser> {

    /**
     * 用户登录记录ip地址与登录时间
     *
     * @param ipAddr
     * @param now
     * @param id
     */
    void updateUserLoginInfo(@Param("ipAddr") String ipAddr, @Param("now") LocalDateTime now, @Param("id") Long id);

    /**
     * 后台管理分页查询用户信息
     *
     * @param userQueryDTO
     * @return
     */
    List<SysAppUserPageVo> pageSys(Page<SysAppUserPageVo> page, @Param("userQueryDTO") SysAppUserQueryDTO userQueryDTO);

    /**
     * 根据上级id查询下级数量
     *
     * @param superior
     * @return
     */
    Integer countBySuperior(@Param("superior") String superior);

    /**
     * 用户邀请记录查询
     *
     * @param baseQuery
     */
    List<AppUserInviteVO> queryUserInviteHistory(@Param("baseQuery") BaseQuery baseQuery);

    /**
     * 查询用户短视频点赞数总和
     *
     * @param userId 用户id
     */
    long countVideoLIke(@Param("userId") Long userId);

    String getUserNameById(Long userId);
    @Select("select user_sys_type from h2_app_user where id=#{userId}")
    String getUserSysType(@Param("userId") Long userId);

    H2AppUser queryUserIno(Long userId);
    /**
     * 查询用户上级层级
     */
    int getUserLevelInfo(Long userId);

    /**
     * 根据用户id查询上级用户信息
     * @param userId
     * @return
     */
    H2AppUser getSuperiorInfo(Long userId);

    List<H2AppUser> getYesterday();

    Integer getbyLastLoginTime(@Param("dto") SysHomeStatisticsDTO dto);

    Integer getTodayPeopleNumber(Integer userSysType);

    List<Long> getsubset(Long oldUserId);

    List<Long> getChildUserIds(@Param("list") List<Long> list);

    List<H2AppUserTreeVo> gettreeList(String userId);

    List<TelephoneAreaCodeVO> getInternationalTelephoneAreaCode(String type);

    //查询店铺模块信息 不规范
    Map<String,String> getShopOrderInfo(String orderNo);

    BigDecimal getAnchorLivesGiftRecord(Long userId);

    String getLiveStreamingLevel(Long userId);

    H2ShopBaseVO getShopInfo(Long userId);

    Integer getActivebyLastLoginTime(String ip);

    List<H2AppUser> getActivebyLastLogin();

    List<SysAppUserPageVo> foundationpage(Page<SysAppUserPageVo> page, @Param("userQueryDTO") SysAppUserQueryDTO userQueryDTO);

    List<AppUserInfoTeamDetailVo> getbyUserids(@Param("page") Page<AppUserInfoTeamDetailVo> page,@Param("list") List<Long> list);

    H2AppUser getFinalAppUser();

    List<String> getsubsetList(@Param("id")  String id);

    Page<SysAppUserActivePageVo> activeUserPage(@Param("page") Page<SysAppUserActivePageVo> page,@Param("baseQuery") BaseQuery baseQuery);

    /**
     * 查询用户彩金
     *
     * @param page
     * @param dto
     * @return
     */
    List<HandselVO> getUserHandsel(Page<HandselVO> page, HandselQueryDTO dto);

    /**
     * 获取某个用户最后一条彩金数据
     * @param userId
     */
    FinanceUserAccountDetail getLastUserHandsel(Long userId);

    /**
     * 用户盈亏报表
     * @param page
     * @return
     */
    List<ProfitAndLossStatisticsVO> profitAndLossStatistics(Page<ProfitAndLossStatisticsVO> page);

    /**
     * 更新用户活跃信息
     * @param userId
     */
    void activeUser(Long userId);

    /**
     *
     * @param email
     * @return
     */
    List<H2AppUser> getMail(String email);

    List<H2AppUser> getgetWeek();

    /**
     * 判断用户是否在直播中，并查询直播场次id和直播间编号
     * @param userId 用户id
     * @return  播场次id和直播间编号
     */
    Map<String, Object> inLiveSessionId(Long userId);

    /**
     * 查询执行中的水军直播间任务
     * @return
     */
    List<String> exampleQueryATaskInProgress();
}
